package com.syf.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.syf.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.syf.dto.UserDto;
import com.syf.model.*;

import java.util.List;
import java.util.Map;

/**
*
*
*@author 苏耀奋
*@create 2021-08-02 14:28
*/
public interface UserService extends IService<User>{

        /**
         * 条件分页查询会员的列表
         * @param page         分页参数
         * @param mobile       会员的手机号
         * @param userId       会员的ID
         * @param userName     会员的名称
         * @param realName     会员的真实名称
         * @param status       会员的状态
         * @param reviewStatus 会员的审核状态
         * @return
         */
        Page<User> findByPage(Page<User> page, String mobile, Long userId, String userName, String realName, Integer status, Integer reviewStatus);


        /**
         * 通过用户的Id 查询 该用户邀请的人员
         * @param page   分页参数
         * @param userId 用户的Id
         * @return
         */
        Page<User> findDirectInvitePage(Page<User> page, Long userId);

        /**
         * 修改用户的审核状态
         * @param id
         * @param authStatus
         * @param authCode
         * @param remark  拒绝的原因
         */
        void updateUserAuthStatus(Long id, Byte authStatus, Long authCode, String remark);

        /**
         * 用户的身份证实名认证
         *
         * @param id           用户的Id
         * @param userAuthForm 认证的表单数据
         * @return 认证的结果
         */
        boolean identifyVerify(Long id, UserAuthForm userAuthForm);

        /**
         * 用户的高级认证
         *
         * @param id   用户的Id
         * @param imgs
         */
        void authUser(Long id, List<String> imgs);

        /**
         * 修改用户的手机号号
         * @param userId 用户id
         * @param updatePhoneParam
         * @return
         */
        boolean updatePhone(Long userId, UpdatePhoneParam updatePhoneParam);

        /**
         * 点击 新手机号发送验证码时: 检查新的手机号是否可用,如可用,则给该新手机发送验证码
         * @param mobile
         * @param countryCode
         * @return
         */
        boolean checkNewPhone(String mobile, String countryCode);

        /**
         * 修改用户的登录密码
         * @param userId 用户id
         * @param updateLoginParam
         * @return
         */
        boolean updateUserLoginPwd(Long userId, UpdateLoginParam updateLoginParam);

        /**
         * 修改用户的交易密码
         * @param userId
         * @param updateLoginParam
         * @return
         */
        boolean updateUserPayPwd(Long userId, UpdateLoginParam updateLoginParam);

        /**
         * 重新设置交易密码
         * @param userId
         * @param unsetPayPasswordParam
         * @return
         */
        boolean unsetPayPassword(Long userId, UnsetPayPasswordParam unsetPayPasswordParam);

        /**
         * 查询被该用户的邀请人的列表
         * @param userId
         * @return
         */
        List<User> getUserInvites(Long userId);

        /**
         * 通过用户ID 批量查询 用户基础信息
         * @param ids
         * @param userName
         * @param mobile
         * @return
         */
        Map<Long, UserDto> getBasicUsers(List<Long> ids, String userName, String mobile);

        /**
         * 用户的注册
         * @param registerParam
         * @return
         */
        boolean register(RegisterParam registerParam);

        /**
         * 用户重置密码(忘了密码？)
         * @param unSetPasswordParam
         * @return
         */
        boolean unsetLoginPwd(UnSetPasswordParam unSetPasswordParam);
}
